package com.tfswx.jcyw.ruleenginedesigner.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.tfswx.ruleengine.compute.exception.AppException;
import com.tfswx.ruleengine.compute.util.CommonUtil;
import com.tfswx.jcyw.ruleenginedesigner.bean.SjysjItem;
import com.tfswx.jcyw.ruleenginedesigner.dao.YsjXtSjyMapper;
import com.tfswx.jcyw.ruleenginedesigner.dao.model.YsjXtSjy;
import com.tfswx.jcyw.ruleenginedesigner.dto.sjygl.*;
import com.tfswx.jcyw.ruleenginedesigner.service.SjyService;
import com.tfswx.ruleengine.compute.util.HttpUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * @author Ricky
 * @date 2021/5/13
 */
@Service
public class SjyServiceImpl implements SjyService {

    @Resource
    private YsjXtSjyMapper ysjXtSjyMapper;

    @Override
    public List<SjyListQueryOutputDTO> querySjyList(SjyListQueryInputDTO sjyListQueryInputDTO) {
        YsjXtSjy ysjXtSjy = new YsjXtSjy();
        BeanUtils.copyProperties(sjyListQueryInputDTO, ysjXtSjy);
        return ysjXtSjyMapper.querySjyList(ysjXtSjy);
    }

    @Override
    public List<CanUseSjyQueryOutputDTO> queryCanUseSjy(CanUseSjyQueryInputDTO canUseSjyQueryInputDTO) {
        YsjXtSjy ysjXtSjy = new YsjXtSjy();
        BeanUtils.copyProperties(canUseSjyQueryInputDTO, ysjXtSjy);
        return ysjXtSjyMapper.queryCanUseSjy(ysjXtSjy);
    }

    @Override
    public String addSjy(SjyAddInputDTO sjyAddInputDTO) {
        YsjXtSjy ysjXtSjy = new YsjXtSjy();
        BeanUtils.copyProperties(sjyAddInputDTO, ysjXtSjy);
        ysjXtSjy.setSjybm(CommonUtil.getUuid());
        ysjXtSjy.setSfsc("N");
        ysjXtSjy.setCjsj(new Date());
        ysjXtSjy.setZhxgsj(new Date());
        int insert = ysjXtSjyMapper.insert(ysjXtSjy);
        if (insert == 1) {
            return ysjXtSjy.getSjybm();
        }
        throw new AppException("添加数据源失败");
    }

    @Override
    public boolean updateSjy(SjyUpdateInputDTO sjyUpdateInputDTO) {
        YsjXtSjy ysjXtSjy = new YsjXtSjy();
        BeanUtils.copyProperties(sjyUpdateInputDTO, ysjXtSjy);
        ysjXtSjy.setZhxgsj(new Date());
        int insert = ysjXtSjyMapper.update(ysjXtSjy);
        if (insert == 1) {
            return true;
        }
        throw new AppException("修改数据源失败");
    }

    @Override
    public boolean deleteSjy(SjyDeleteInputDTO sjyDeleteInputDTO) {
        YsjXtSjy ysjXtSjy = new YsjXtSjy();
        BeanUtils.copyProperties(sjyDeleteInputDTO, ysjXtSjy);
        ysjXtSjy.setZhxgsj(new Date());
        int insert = ysjXtSjyMapper.delete(ysjXtSjy);
        if (insert == 1) {
            return true;
        }
        throw new AppException("删除数据源失败");
    }

    @Override
    public boolean undeleteSjy(SjyUndeleteInputDTO sjyUndeleteInputDTO) {
        YsjXtSjy ysjXtSjy = new YsjXtSjy();
        BeanUtils.copyProperties(sjyUndeleteInputDTO, ysjXtSjy);
        ysjXtSjy.setZhxgsj(new Date());
        int insert = ysjXtSjyMapper.undelete(ysjXtSjy);
        if (insert == 1) {
            return true;
        }
        throw new AppException("修改数据源失败");
    }

    //    @Override
    //    public SjyBySjybmGetOutputDTO getSjyBySjybm(SjyBySjybmGetInputDTO sjyBySjybmGetInputDTO) {
    //        YsjXtSjy ysjXtSjy = ClassUtil.convert(sjyBySjybmGetInputDTO, YsjXtSjy.class);
    //        ysjXtSjy = ysjXtSjyMapper.getSjyBySjybm(ysjXtSjy);
    //        return ClassUtil.convert(ysjXtSjy, SjyBySjybmGetOutputDTO.class);
    //    }

    @Override
    public List<SjysjItem> getSjysj(SjysjGetInputDTO sjysjGetInputDTO) {
        //        SjyBySjybmGetInputDTO sjyBySjybmGetInputDTO = new SjyBySjybmGetInputDTO();
        //        sjyBySjybmGetInputDTO.setSjybm(sjysjBySjybmGetInputDTO.getSjybm());
        //        SjyBySjybmGetOutputDTO sjyBySjybm = getSjyBySjybm(sjyBySjybmGetInputDTO);
        String sjydz = sjysjGetInputDTO.getSjydz();
        //        if (StringUtils.isBlank(sjydz)) {
        //            return new ArrayList<>();
        //        }
        String glcs = sjysjGetInputDTO.getGlcs();
        JSONObject jsonObject = HttpUtil.postForObject(sjydz, JSON.parseObject(glcs), JSONObject.class);
        return getSjyData(jsonObject);
    }

    private List<SjysjItem> getSjyData(JSONObject response) {
        boolean success = response.getBooleanValue("success");
        if (!success) {
            throw new AppException(response.getString("message"));
        }
        return response.getJSONObject("data")
                .getJSONArray("objects")
                .toJavaList(SjysjItem.class);
    }

}
